package br.com.mauricioreis;

import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
import br.com.mauricioreis.db.Alimento;
import br.com.mauricioreis.db.Medida;
import br.com.mauricioreis.db.MedidaAlimento;
import br.com.mauricioreis.db.Util;

public class AlimentoIncluirAct extends Activity {
    private Button btACadaXGramas;
    private EditText etNome;
    private EditText etCarboidrato;
    private EditText etProteina;
    private EditText etGorduraTotal;
    private EditText etGorduraSaturada;
    private EditText etFibra;
    private EditText etSodio;
    private EditText etCalcio;
    private EditText etFerro;
    private EditText etVitaminaC;

    private Button btConfirmar;
    private Button btCancelar;
    private Integer valorPorcao = 100;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.alimento_incluir);
        etNome = (EditText) findViewById(R.id.alimentoIncluirNome);
        etCarboidrato = (EditText) findViewById(R.id.alimentoIncluirCarboidrato);
        etProteina = (EditText) findViewById(R.id.alimentoIncluirProteina);
        etGorduraTotal = (EditText) findViewById(R.id.alimentoIncluirGorduraTotal);
        etGorduraSaturada = (EditText) findViewById(R.id.alimentoIncluirGorduraSaturada);
        etFibra = (EditText) findViewById(R.id.alimentoIncluirFibra);
        etSodio = (EditText) findViewById(R.id.alimentoIncluirSodio);
        etCalcio = (EditText) findViewById(R.id.alimentoIncluirCalcio);
        etFerro = (EditText) findViewById(R.id.alimentoIncluirFerro);
        etVitaminaC = (EditText) findViewById(R.id.alimentoIncluirVitaminaC);
        btCancelar = (Button) findViewById(R.id.alimentoIncluirCancelar);
        btACadaXGramas = (Button) findViewById(R.id.alimentoIncluirACadaXGramas);
        criaBotaoCancelar();
        criaBotaoConfirmar();
        montaACadaXGramas();

    }

    private void criaBotaoConfirmar() {
        btConfirmar = (Button) findViewById(R.id.alimentoIncluirConfirmar);
        btConfirmar.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                if (!validaRegrasInclusaoAlimento()) {
                    Toast.makeText(AlimentoIncluirAct.this, "Preencha os campos obrigatórios (*)", Toast.LENGTH_LONG).show();
                    return;
                }
                Alimento alimento = new Alimento();
                alimento.setNome(etNome.getText().toString());
                alimento.setCarboidrato(Float.valueOf(etCarboidrato.getText().toString()) / valorPorcao);
                alimento.setProteina(Float.valueOf(etProteina.getText().toString()) / valorPorcao);
                alimento.setGorduraTotal(Float.valueOf(etGorduraTotal.getText().toString()) / valorPorcao);
                alimento.setGorduraSaturada(Float.valueOf(etGorduraSaturada.getText().toString()) / valorPorcao);
                alimento.setFibra(Float.valueOf(etFibra.getText().toString()) / valorPorcao);
                alimento.setSodio(Util.formataMicroNutrienteParaSalvar(etSodio.getText().toString()) / valorPorcao);
                // Seta valores padrão
                if (!etCalcio.getText().toString().isEmpty()) {
                    alimento.setCalcio(Util.formataMicroNutrienteParaSalvar(etCalcio.getText().toString()) / valorPorcao);
                } else {
                    alimento.setCalcio(0F);
                }
                if (!etFerro.getText().toString().isEmpty()) {
                    alimento.setFerro(Util.formataMicroNutrienteParaSalvar(etFerro.getText().toString()) / valorPorcao);
                } else {
                    alimento.setFerro(0F);
                }
                if (!etVitaminaC.getText().toString().isEmpty()) {
                    alimento.setVitaminaC(Util.formataMicroNutrienteParaSalvar(etVitaminaC.getText().toString()) / valorPorcao);
                } else {
                    alimento.setVitaminaC(0F);
                }

                Long idAlimento = Alimento.incluir(AlimentoIncluirAct.this, alimento);
                // inclui medida alimento relacionando novo alimento com a medida padrão (gramas)
                MedidaAlimento medidaAlimento = new MedidaAlimento();
                // obtem instancia da medida padrão
                Medida medidaPadrao = Medida.consultarPorNome(AlimentoIncluirAct.this, Medida.NOME_MEDIDA_PADRAO);
                // seta os ids que criam a relação entre medida e alimento
                medidaAlimento.setIdMedida(medidaPadrao.getId());
                medidaAlimento.setIdAlimento(idAlimento.intValue());
                // Uma grama do alimento inserido equivale a uma grama da medida padrão(grama)
                medidaAlimento.setMedidaGrama(1F);
                // incluir medida padrão
                MedidaAlimento.incluir(AlimentoIncluirAct.this, medidaAlimento);
                finish();
            }
        });
    }

    private void montaACadaXGramas() {
        btACadaXGramas.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View arg0) {
                AlertDialog.Builder alert = new AlertDialog.Builder(AlimentoIncluirAct.this);

                alert.setTitle("Porção");
                alert.setMessage("Informe o tamanho da porção em gramas");

                // Set an EditText view to get user input
                final EditText etValorPorcao = new EditText(AlimentoIncluirAct.this);
                alert.setView(etValorPorcao);

                alert.setPositiveButton("Confirmar", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int whichButton) {
                        Integer valorPorcaoAntigo = AlimentoIncluirAct.this.valorPorcao;
                        String stValorPorcao = etValorPorcao.getText().toString();
                        AlimentoIncluirAct.this.valorPorcao = Integer.valueOf(stValorPorcao);
                        AlimentoIncluirAct.this.btACadaXGramas.setText("A cada " + stValorPorcao + "g do alimento");
                        AlimentoIncluirAct.this.atualizaValoresExibidos(valorPorcaoAntigo, Util.etToInteger(etValorPorcao));
                    }
                });

                alert.setNegativeButton("Cancelar", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int whichButton) {
                        // Cancelado.
                    }
                });
                alert.show();
            }

        });
    }

    /**
     * Atualiza os valores exibidos na tela conforme o valor da porção
     */

    protected void atualizaValoresExibidos(Integer valorPorcaoAntigo, Integer valorPorcaoAtual) {
        Float valorCarboidrato = (Util.etToFloat(etCarboidrato) / valorPorcaoAntigo) * valorPorcaoAtual;
        etCarboidrato.setText(valorCarboidrato.toString());

        Float valorProteina = (Util.etToFloat(etProteina) / valorPorcaoAntigo) * valorPorcaoAtual;
        etProteina.setText(valorProteina.toString());

        Float valorGorduraTotal = (Util.etToFloat(etGorduraTotal) / valorPorcaoAntigo) * valorPorcaoAtual;
        etGorduraTotal.setText(valorGorduraTotal.toString());

        Float valorGorduraSaturada = (Util.etToFloat(etGorduraSaturada) / valorPorcaoAntigo) * valorPorcaoAtual;
        etGorduraSaturada.setText(valorGorduraSaturada.toString());

        Float valorFibra = (Util.etToFloat(etFibra) / valorPorcaoAntigo) * valorPorcaoAtual;
        etFibra.setText(valorFibra.toString());

        Float valorSodio = (Util.etToFloat(etSodio) / valorPorcaoAntigo) * valorPorcaoAtual;
        etSodio.setText(valorSodio.toString());

        Float valorCalcio = (Util.etToFloat(etCalcio) / valorPorcaoAntigo) * valorPorcaoAtual;
        etCalcio.setText(valorCalcio.toString());

        Float valorFerro = (Util.etToFloat(etFerro) / valorPorcaoAntigo) * valorPorcaoAtual;
        etFerro.setText(valorFerro.toString());

        Float valorVitaminaC = (Util.etToFloat(etVitaminaC) / valorPorcaoAntigo) * valorPorcaoAtual;
        etVitaminaC.setText(valorVitaminaC.toString());
    }

    private void criaBotaoCancelar() {
        btCancelar.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View arg0) {
                finish();
            }
        });
    }

    /**
     * Valida as regras de campos obrigatorios
     * 
     * @return falso de houve a falta de algum campo obrigatorio
     */
    private boolean validaRegrasInclusaoAlimento() {
        if (etCarboidrato.getText() == null || etCarboidrato.getText().toString().isEmpty()) {
            return false;
        }
        if (etProteina.getText() == null || etProteina.getText().toString().isEmpty()) {
            return false;
        }
        if (etGorduraTotal.getText() == null || etGorduraTotal.getText().toString().isEmpty()) {
            return false;
        }
        if (etGorduraSaturada.getText() == null || etGorduraSaturada.getText().toString().isEmpty()) {
            return false;
        }
        if (etFibra.getText() == null || etCarboidrato.getText().toString().isEmpty()) {
            return false;
        }
        if (etSodio.getText() == null || etCarboidrato.getText().toString().isEmpty()) {
            return false;
        }
        if (etCarboidrato.getText() == null || etCarboidrato.getText().toString().isEmpty()) {
            return false;
        }
        if (etCarboidrato.getText() == null || etCarboidrato.getText().toString().isEmpty()) {
            return false;
        }
        if (etCarboidrato.getText() == null || etCarboidrato.getText().toString().isEmpty()) {
            return false;
        }
        if (etCarboidrato.getText() == null || etCarboidrato.getText().toString().isEmpty()) {
            return false;
        }

        return true;
    }
}
